const app = getApp()
import api from '../../../config/api'
import path from '../../../config/path'
import webSocketManager from '../../../utils/websocket'

Page({
  data: {
    loginName: '',
    password: '',
    smsCode: '',
    loginMethod: 'password', // 'password' 或 'sms'
    smsCountdown: 0,
    isLoggingIn: false
  },

  onInputLoginName(e) {
    this.setData({ loginName: e.detail.value })
  },

  onInputPassword(e) {
    this.setData({ password: e.detail.value })
  },

  onInputSmsCode(e) {
    this.setData({ smsCode: e.detail.value })
  },

  // 切换登录方式
  switchLoginMethod(e) {
    const method = e.currentTarget.dataset.method
    this.setData({
      loginMethod: method,
      password: '',
      smsCode: ''
    })
  },

  // 获取验证码
  async getSmsCode() {
    if (!this.data.loginName) {
      wx.showToast({
        title: '请输入手机号',
        icon: 'none'
      })
      return
    }

    // 简单的手机号格式验证
    const phoneRegex = /^1[3-9]\d{9}$/
    if (!phoneRegex.test(this.data.loginName)) {
      wx.showToast({
        title: '请输入正确的手机号',
        icon: 'none'
      })
      return
    }

    wx.showLoading({ title: '发送中...' })

    try {
      const res = await api.post('user', path.path.sendPhoneCode, {
        phone: this.data.loginName
      })

      wx.hideLoading()
      
      if (res.code === 200) {
        wx.showToast({
          title: '验证码发送成功',
          icon: 'success'
        })
        
        // 开始倒计时
        this.startSmsCountdown()
      } else {
        wx.showToast({
          title: res.message || '验证码发送失败',
          icon: 'none'
        })
      }
    } catch (err) {
      wx.hideLoading()
      console.error('发送验证码失败:', err)
      wx.showToast({
        title: err.message || '验证码发送失败',
        icon: 'none'
      })
    }
  },

  // 开始验证码倒计时
  startSmsCountdown() {
    this.setData({ smsCountdown: 60 })
    
    const timer = setInterval(() => {
      if (this.data.smsCountdown <= 1) {
        clearInterval(timer)
        this.setData({ smsCountdown: 0 })
      } else {
        this.setData({ smsCountdown: this.data.smsCountdown - 1 })
      }
    }, 1000)
  },

  // 处理登录
  async handleLogin() {
    if (!this.data.loginName) {
      wx.showToast({
        title: '请输入账号',
        icon: 'none'
      })
      return
    }

    if (this.data.loginMethod === 'password') {
      if (!this.data.password) {
        wx.showToast({
          title: '请输入密码',
          icon: 'none'
        })
        return
      }
    } else {
      if (!this.data.smsCode) {
        wx.showToast({
          title: '请输入验证码',
          icon: 'none'
        })
        return
      }
    }

    this.setData({ isLoggingIn: true })
    wx.showLoading({ title: '登录中...' })

    try {
      let res
      
      if (this.data.loginMethod === 'password') {
        // 密码登录
        res = await api.post('user', path.path.login, {
          username: this.data.loginName,
          password: this.data.password
        })
      } else {
        // 验证码登录
        res = await api.post('user', path.path.smsLogin, {
          phone: this.data.loginName,
          code: this.data.smsCode
        })
      }

      wx.hideLoading()
      this.setData({ isLoggingIn: false })
      
      if (res.code === 200) {
        const data = res.data || {}
        const token = data.token || ''
        const userInfo = data.user || data.userInfo || {}
        
        console.log('登录成功，用户信息:', userInfo)
        
        // 确保用户信息包含必要的字段
        const formattedUserInfo = {
          id: userInfo.id,
          username: userInfo.username,
          phone: userInfo.phone,
          role: userInfo.role,
          realName: userInfo.realName,
          avatar: userInfo.avatar,
          name: userInfo.realName || userInfo.username,
          headUrl: userInfo.avatar,
          sex: userInfo.sex || '0',
          roleStr: this.getRoleString(userInfo.role),
          openId: userInfo.openId || null
        }
        
        console.log('格式化后的用户信息:', formattedUserInfo)
        
        // 保存登录信息
        wx.setStorageSync('token', token)
        wx.setStorageSync('userInfo', formattedUserInfo)
        wx.setStorageSync('isLogin', true)

        wx.showToast({
          title: '登录成功',
          icon: 'success'
        })

        // 登录成功后连接WebSocket
        await this.connectWebSocket(token, formattedUserInfo)
        
        // 设置全局消息处理器
        this.setupAppGlobalHandler()
      }
    } catch (err) {
      wx.hideLoading()
      this.setData({ isLoggingIn: false })
      console.error('登录失败:', err)
      wx.showToast({
        title: err.message || '登录失败',
        icon: 'none'
      })
    }
  },

  // 设置应用全局处理器
  setupAppGlobalHandler() {
    const app = getApp()
    if (app && app.setupGlobalMessageHandler) {
      app.setupGlobalMessageHandler()
    }
  },

  // 角色转换方法
  getRoleString(role) {
    const roleMap = {
      0: '普通用户',
      1: '房东',
      2: '管理员'
    }
    return roleMap[role] || '未知角色'
  },

  // 连接WebSocket
  async connectWebSocket(token, userInfo) {
    try {
      // 连接WebSocket，只关注连接成功和错误
      await webSocketManager.connect(
        token,
        userInfo,
        // 简化的消息处理，只处理欢迎消息
        (message) => {
          if (message.type === 'WELCOME') {
            // this.handleWelcomeMessage(message)
          }
        },
        // 错误处理
        (error) => {
          console.error('WebSocket连接错误:', error)
        }
      )

      console.log('WebSocket连接成功')
      this.navigateToHomePage()
    } catch (error) {
      console.error('WebSocket连接失败:', error)
      // 即使WebSocket连接失败，也允许登录成功，只是没有实时消息功能
      this.navigateToHomePage()
    }
  },

  // 处理欢迎消息
  handleWelcomeMessage(message) {
    console.log('收到欢迎消息:', message)
    this.navigateToHomePage()
  },

  // 跳转到首页
  navigateToHomePage() {
    setTimeout(() => {
      wx.switchTab({
        url: '/pages/userInfo/myInfo'
      })
    }, 1000)
  },

  onUnload() {
    // 页面卸载时清除倒计时
    this.setData({ smsCountdown: 0 })
  }
})